﻿' ******************************************************************************
' ** 
' **  Yahoo! Managed
' **  Written by Marius Häusler 2011
' **  It would be pleasant, if you contact me when you are using this code.
' **  Contact: YahooFinanceManaged@gmail.com
' **  Project Home: http://code.google.com/p/yahoo-finance-managed/
' **  
' ******************************************************************************
' **  
' **  Copyright 2011 Marius Häusler
' **  
' **  Licensed under the Apache License, Version 2.0 (the "License");
' **  you may not use this file except in compliance with the License.
' **  You may obtain a copy of the License at
' **  
' **    http://www.apache.org/licenses/LICENSE-2.0
' **  
' **  Unless required by applicable law or agreed to in writing, software
' **  distributed under the License is distributed on an "AS IS" BASIS,
' **  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' **  See the License for the specific language governing permissions and
' **  limitations under the License.
' ** 
' ******************************************************************************


Namespace YahooManaged.Search.BOSS

    Public MustInherit Class BossSearchResultContainer
        Implements IEnumerable

        Private mStart, mCount As Integer
        Private mTotalResults As Long
        Private mType As BossResultType
        Private mResults() As SearchResult

        Public ReadOnly Property Type As BossResultType
            Get
                Return mType
            End Get
        End Property
        Public ReadOnly Property Start As Integer
            Get
                Return mStart
            End Get
        End Property
        Public ReadOnly Property Count As Integer
            Get
                Return mCount
            End Get
        End Property
        Public ReadOnly Property TotalResults As Long
            Get
                Return mTotalResults
            End Get
        End Property
        Public ReadOnly Property Results As SearchResult()
            Get
                Return mResults
            End Get
        End Property

        Protected Sub New(ByVal results() As SearchResult, ByVal type As BossResultType, ByVal start As Integer, ByVal count As Integer, ByVal total As Long)
            mResults = results
            mType = type
            mStart = start
            mCount = count
            mTotalResults = total
        End Sub

        Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
            Return mResults.GetEnumerator
        End Function
    End Class



    Public Class WebSearchResultContainer
        Inherits BossSearchResultContainer

        Public Overloads ReadOnly Property Results As WebSearchResult()
            Get
                Return CType(MyBase.Results, WebSearchResult())
            End Get
        End Property

        Friend Sub New(ByVal results() As WebSearchResult, ByVal type As BossResultType, ByVal start As Integer, ByVal count As Integer, ByVal total As Long)
            MyBase.New(results, type, start, count, total)
        End Sub

    End Class



    Public Class ImageSearchResultContainer
        Inherits BossSearchResultContainer

        Public Overloads ReadOnly Property Results As ImageSearchResult()
            Get
                Return CType(MyBase.Results, ImageSearchResult())
            End Get
        End Property

        Friend Sub New(ByVal results() As ImageSearchResult, ByVal type As BossResultType, ByVal start As Integer, ByVal count As Integer, ByVal total As Long)
            MyBase.New(results, type, start, count, total)
        End Sub

    End Class



    Public Class NewsSearchResultContainer
        Inherits BossSearchResultContainer

        Public Overloads ReadOnly Property Results As NewsSearchResult()
            Get
                Return CType(MyBase.Results, NewsSearchResult())
            End Get
        End Property

        Friend Sub New(ByVal results() As NewsSearchResult, ByVal type As BossResultType, ByVal start As Integer, ByVal count As Integer, ByVal total As Long)
            MyBase.New(results, type, start, count, total)
        End Sub

    End Class

    Public Class SpellingSearchResultContainer
        Inherits BossSearchResultContainer

        Public Overloads ReadOnly Property Results As SpellingSearchResult()
            Get
                Return CType(MyBase.Results, SpellingSearchResult())
            End Get
        End Property

        Friend Sub New(ByVal results() As SpellingSearchResult, ByVal type As BossResultType, ByVal start As Integer, ByVal count As Integer, ByVal total As Long)
            MyBase.New(results, type, start, count, total)
        End Sub

    End Class

End Namespace